//  /*******************************************************************************
//  * Author      :  ChuanQin Yu                                                   *
//  * Copyright   :  (c) ChuanQin Yu 2023-2024                                     *
//  * mail        :  ycq1014@gmail.com                                             *
//  * License     :  http://www.boost.org/LICENSE_1_0.txt                          *
//  ********************************************************************************

#ifndef BORDERLESSWIDGET_H
#define BORDERLESSWIDGET_H

#include <QtWidgets>
#include "titleBar.h"

// 八个方向
enum Direction
{
    UP,                 // 上
    DOWN,               // 下
    LEFT,               // 左
    RIGHT,              // 右
    LEFTTOP,            // 左上
    LEFTBOTTOM,         // 左下
    RIGHTTOP,           // 右上
    RIGHTBOTTOM,        // 右下
    NONE                // 无
};

class BorderlessWidget: public QWidget
{
    Q_OBJECT

public:
    explicit BorderlessWidget(QWidget *parent = nullptr);
    void setContent(QWidget *contentWidget);

private:
    TitleBar *titleBar{};                     // 标题栏
    QVBoxLayout *layoutMain{};                // 主布局
    QVBoxLayout *layoutContent{};             // 添加一个主界面布局

    Direction dir {NONE};                     // 方向

    bool isPressed {false};                   // 是否按下

    QPoint dragPosition{};                    // 拖动位置

    // 变框大小
    const int PADDING = 11;                   // 边距


private:
    void init();

    // 识别鼠标所在的区域
    void region(const QPoint &cursorGlobalPoint);

    // 设置window窗口样式, 内外边框
    /* 我需要其根据窗口状态进行 */
    void setWindowStyle(bool isMaximized);

private:
    void mouseReleaseEvent(QMouseEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void changeEvent(QEvent *event) override;
    bool eventFilter(QObject *watched, QEvent *event) override;


private slots:
    void setWindowOnTop();
    void unsetWindowOnTop();
};

#endif // BORDERLESSWIDGET_H